Правильна ли реализация наследования синглтона?
По-моему, фигня и бред. Открой для себя dependency injection.
Первое решение приходящее на ум - сделать их статическими, со всеми вытекающими последствиями: все поля классов статические, все методы тоже статические, что кажется не сильно правильным в ООП-языке.
Если хотите писать процедурно - пишите процедурно) То, что вы сделаете все синглтонами - не сделает ваш код ООП-шным. Он будет только притворяться ООПшным, но не быть им. Но, возможно, оно вам и не нужно?