I understand why it is happening. I don't understand why someone would want the binding to be created on the fly in such way. It is counterintuitive for me. It has serious consequences and I don't see a use case where I would want such behaviour (for the "set").
I was thinking about using explicit base script declaration and compile options. Both would require special action from the potential user and second would not work with grape. So I was also thinking about global ast transformation that checks if I have a script with my method and then change the base class. This would look better but it would be harder to explain,