I'm working on such design now (may be you could take some ideas from it):
I have multiple Area2D(to have inputevent) as a parent/root of item and couple child-plugins, like context menu or leftbuttonaction. Each Area2D has specific for such type of item code in 'agreed'-named functions like doinspect, dotake, do...
Each child-plugin can be added as a child(wow) to any Area2D. In child-plugin's ready function he binds to parent's inputevent handler.
For example, context menu has code like: if it's rightmousebutton pressed, then show menu. Menu has several buttons. Each button has code(inside plugin):
if parent.hasmethod("dotake"): parent.do_take(some args from event) else assert(false)
Also it's possible to hide buttons, if you wish.
May be it's reinventing something already made inside engine but I don't find anything. This mechanism is more like poor man's virtual functions/polymorphism