Singletons are great for some things, and not bad design at all. Font managers, sound managers, upload managers, focus managers, anything that starts and stops threads are all good candidates for them. Singletons are an obvious solution for any program that needs to round-robin users to one of many nodes upon login and then leave them there for all classes to communicate with. Especially if you might need all your classes to suddenly start talking to a different server node instead. There's no reason -- and it's possibly dangerous -- to create multiple instances of any of the above...and the ability to (for instance) globally alter the volume of all the sounds of a given type in your game, or call a static function to play any sound, far outweighs the supposed design beauty of OO in those cases. In fact, you could argue that OO code only really works because it relies on a single instance of the system it's running on to manage one or more threads, one or more sound channels through a single set of speakers, etc.
If common sense would dictate that there should never be more than one instance of something, then enforcing that becomes good design, the equivalent of writing good docs and clean virtual classes / interfaces.