As much as it pains me to say it, I'm not fond of controls.dat viewers. Most of them are pretty useless when it comes to a single screen setup due to the complexity of getting something to display overtop of mame. There are certainly ways to do it, but not without a significant amount of hackery involved.
I think mame's artwork system is the key to removing this issue. It has grown enough and is now integrated into mame's ui enough that I think the best way to show controls is to generate artwork files with an overlayed control panel image.
I think for it to be practical, however, official mame would need to accept at least two additions: UIShowArt and UICycleView
UIShowArt would be a button binding that simply turns on/off artwork on the fly. The ui menu already lets you do this, so it would simply be a matter of binding a key. UICycleView would simply cycle the different defined views in the artwork menu. This would allow for multiple "pages" of controls info.
There are complications to this though. Firstly, the artwork view system is integrated with the different aspects and such. That means that in additon to the different views we would generate, cocktail view and actual pixel aspect would also be mixed in there. Also if you currently had it on cocktail view and you displayed artwork it wouldn't automatically display the controls images in a cocktail style. Secondly, we would have to deal with real artwork as well. Do we ignore it? Modify it to include an image overlay? Finally there is the problem of game aspects. You can create mame artwork files with either hard-coded pixel dimensions or percentages. The problem is mame's artwork system doesn't preserve aspect ratios, so simply setting our images to 100% would merely distort it beyond recognition. While it's quite easy to get the pixel resolution of any game (comes out of listxml) it's sometimes hard to determine the aspect ratio, especially on odd-ball dual monitor games.
I'm just reluctant to suggest adding such options to the mame team. Afterall, they removed infodat support some time ago claiming that it was too far away from mame's purpose.