@ S4racen: The functions that are larger than two are expecting tuples....if the function is written differently, it can handle individual arguments. Its just coincidental that the functions that are looking for two buttons at once are written like:
def function_blah(self, blah_a, blah_b)
That's another place we can write a simple function in the main class that can handle this:
def define_four_buttons(self, button_a, button_b, button_c, button_d)
self.holder = [button_a, button_b, button_c, button_d]
....and then call the original function that we wanted to call that wants a tuple, and we have it defined as the "holder" that we can pass the function we want to redefine elements for.
We can't pass a tuple from Max, but we can pass multiple arguments to the script, compile them as a tuple in Python, and then use that stored tuple somewhere else. We just need to come up with a plan of stuff that we need to be able to do, and then come up with a clever way of implementing it in a simple, general way that is constructive and NOT destructive to the _Framework that already exists.
For the record, I think I'm doing things roughly the way you are...I don't think I'm calling set_disabled unless set_blah_button is looking for a tuple, then I disable it and reenable it later. I never completely destruct the class, as, obviously, then you can't get it back again.
@ Hanz: I'm still having trouble wrapping my head around how the _Framework classes handle add_value_listener methods; I can add them manually myself, no problem, but can't figure out how to hijack the listeners that are already created by the scripts. It seems like the only component with a listenable property is the ModeSelectorComponent, and I'm obviously just missing something about how it operates.
I think what can be done here is to create a super-class to wrap the original c_s class in, and define some basic utility functions inside that class that aren't necessary to the _Framework stuff, but can operate on top of it. Basic listener functions to be initiated after the main c_s class is constructed, some tuple_wrappers, the sysex_out stuff we already figured out for talking directly to the control surface (mainly for control_surfaces with LCD's or other unordinaries), and whatever else might be needed.
I don't even know if that is possible...theoretically, I think it is though. If it works like that, there would be no need to modify any of the existing _Framework docs or compiled scripts...all the additional functionality could be attained in the top Class, and other sub-classes could be added to deal with API stuff that's not included in the _Framework already. Thoughts?
@ ShelLuser: I've tried your script again...good work

I tried it a while ago and it kept crashing/not working, which was a bummer because it looked promising. Its nice to have it in the format you've made. I've been using Mathieu's since beta, but it takes up too much real estate on the screen.
Suggestions: make it windowable. If you are working on c_s scripts (as it seems everyone suddenly wants to do) it will be disappearing a good deal if its tied to a track (like every time you call a function that takes you away from that track).
There needs to be a text box that you can type arguments into for "Call function"....it's next to useless without this to test things out (mathieu's was largely the same), as most functions require an argument to do anything, and most of them want something that's not simply an int/float.
I've noticed that if you add/remove a c_s, the umenu doesn't update this...it just keeps adding the same one to the end of the list. I'm looking to see if anything can be done about this....I've had issues with this and my own patches, so maybe there's nothing to be done.
There was a suggestion box, right? hehe