Issues:
1) There are a thousand functions in ML and more being added constantly. They are beginning to conflict with each other when set to the same physical control. Right now there's no central way to reconcile these conflicts.
2) Nobody uses more than a small subset of functionality for a given photographic task. So while there are numerous functions, we only need a small subset of them available via the buttons/controls at any given time for maximum efficiency.
3) Since many of the controls are locked to a specific function, they aren't useful for photographic tasks that don't make use of that function. (I never use the wheel near the screen on my 5D2 when shooting real estate, for example.) This is a waste of precious buttons and dials.
4) Just being able to trigger a script with a particular button offers a huge amount of functionality. Things like the type of output message or beep confirmation can be customized in this case. I think this would actually be the primary use for the button manager.
(Not sure about the status of scripts atm--haven't tested in a while. But button availability was very limited. I'd hope this would result in more controls being available more of the time for customization. Also, it didn't seem like buttons were very responsive with scripts either. A button manager might solve this problem just because the script wouldn't have to do the polling--I don't know, you tell me.)
Implementation:
Without knowing much about how ML works internally, it's kind of hard for me to talk about how this should be done because I don't know what's impossible or too difficult to be worth implementing. Probably everything I say here will be little more than a masturbatory fantasy.
That said, there are a couple button press variations like normal press, press & hold, double-click, dial up/down. Then there are different camera states such as LV, non-LV, info, Canon menu, ML menu, playback that could potentially have configurable button assignments. However, it might not be worthwhile making configurable buttons for most of those modes. I can't even think of why we'd need to distinguish between LV and non-LV. When would you need to use a key to do something in LV and the same key to do something else outside of LV without just changing the current configuration? A script could handle this logic if someone really needed it.
It might be advantageous to think of usage in the framework of "photographic tasks". You pick up your camera to shoot a specific kind of thing and you usually only need stuff relevant to that. Even when you are just walking around with your camera somewhere, there's a limited subset of functions that you'd want to access that are generally useful. (Dual-iso is more generally useful than HDR bracketing.) When you're doing something more narrowly defined, you want a limited subset of functions that are specific to that task. What we can get from this I think, is that we really don't need states when we already have configs. Tell me if I'm wrong.
So for a GUI, I envision a separate top-level menu section for Controls. Each configurable button would listed right there, along with various types of event and action. Maybe a tree:
Set
click
d-click
hold
toggle on click
toggle on d-click
toggle while pressed
something else/better?
Info
click
d-click
hold
...
If we did want to define states I guess we'd need another layer of menus. (I do not know how to make a mockup.)
Clicking one of these would pop up a list of available functions and scripts from which to select. The core of ML and modules could register a function instead of trying to grab a key. These functions would be available to choose in this GUI. This is a lot of work, but even a couple keys would be a big deal, and perhaps they can be slowly added.