Okay - let me try and cover all the salient points in the discussion so far...
I really couldn't tell you why this code has languished there for so long... I think it was born of an afternoon of frustration with something else, so I distracted myself by implementing it but it never subsequently scheduled for finishing off in a release (I suspect the push to mobile got in the way at some point).
In terms of the state of the code, I do think it is pretty much complete - the
only aspect that I think is missing is the ability to get a reference to the current behavior script's object (at the moment you can do 'the behavior of me' since only single level behaviors work). At the time this irked me (I couldn't think of a simple keyword or some such to use), however I don't think this would get used much in practice and so probably isn't worth worrying too much about.
In regards to the other aspects of oop-ness, then it is important to remember that behaviors were never really about general oop - they were about code-sharing (mix-in inheritence I think would be the technical term) so I'd be wary about trying to force their usefulness beyond that. Apart from anything else, their completely dynamic nature is at odds to wanting any sort of 'custom syntax' (which has to be static for a variety of reasons). ( I should point out that the whole refactor / open language thing is the initial stages to tackle some elements that are referenced here but that is perhaps a discussion for another day

).
Of course what adding an inheritence chain like this does do is allow behaviors to share a common set of scripted handlers that could make them more 'traditional' oop-like. So you could have a base 'object' behavior script that defines base-level properties and such that all script's using objects sharing this base script can rely upon - this would be a good place for a (scripted) 'kind' property or some such.
In terms of being able to easily determine what behaviors an object implements then perhaps something like
This could perhaps search the names of the objects in the behavior chain, returning true if it finds one. A simple action like this (of course) leaves any naming issues completely up to protocol and script-level (i.e. out of the engine, which is perhaps the best place for now).
Going back to the quick reference as to why behaviors can only be scripts of buttons... Being used as a behavior has absolutely nothing to do with the control type the script is set on and nor should it - it is just the script that is important (behaviors are just about script). Ideally, at the time, we would have added a script object (which would have been the right thing for backScripts and frontScripts too) but there were issues with doing that (although, it is something we should probably revisit when we sort out the file-format once and for all). So, to reiterate, I've not yet seen a single (good?) reason why you need to reference more than buttons for behaviors given their current functionality, thus I don't see the need to change the current behavior

[ I think if we had had a 'script' object at the start for them, I don't think anyone would ever have questioned the fact you needed to use them for behaviors rather than a control - indeed having to reference a control of any type introduces a sort of confusion into the mix, since it might lead you to believe, wrongly, that the control which has the behavior script set on it has something to do with the action of the behavior, which it doesn't. ]
Finally, food for thought, there is a orthogonal addition to behaviors to be considered... Being able to set multiple behaviors on a single object - this would be a simple analog of multiple (mix-in) inheritence. However, this might be something to discuss on a separate thread...
P.S. I'm more than happy to enable FEATURE_INHERITED_PARENTSCRIPTS for the next non-maintenance version unless that wasn't implicitly clear from the above ramblings
