Yes, you can by using function pointers (or script indexes as game maker calls them).
You already know that you can have an object be a child object type of some other parent. You want parent A to have a general method "action()" that can be called in B, C, and D and have varying behavior. This can be done via function pointers, and is precisely the same way that the internals of most OOP languages do so. The reason you have to do this yourself is that game maker is an event oriented language (or at least that's how I have heard it phrased). Hence, objects don't have methods they have events and those are predefined or addable with triggers.
So how do you do function pointers in game maker? Suppose you have a few versions of the method written as scripts:
Then just give the parent A and each of the children a variable called action_pointer. For A set action_pointer = action, and do similarly for each of the children. Then use the function script_execute to call the stored index.
You will have to make the methods separate from the objects and written as scripts (unless you wish to use the forbidden execute_string function which I highly recommend not using), but that can be done with simple organization and folders for different objects. The nice thing here is that if you do all this in the create event and call the parent's event before doing the sub-objects initialization within a create event then you get the effect of hierarchical behavior as an interface. I haven't had a particular use for it in game maker but it sounds like what you are wanting.
See here for more details on the script_execute function: http://gamemaker.info/en/manual/409_06_scripts