An alternative API for this would be for each base plugin to define the methods it wants functions for and the ProviderPluginReader could use those to check that the arguments match up. We'd still need lists of required and optional functions but it might be clearer that way.