When compiling a catalog, types and providers are validated, but while Puppet will load types from the agent's environment, it only loads providers from the compiling master's default environment (production).
This is a problem because the method that creates the provider parameter is sometimes called due to code in the provider, not the type. If a custom resource type only exists in a non-default environment, and you declare a resource that specifies a value for the provider attribute, this can cause an invalid parameter provider error.
The expected behavior is that Puppet will autoload types and providers from the agent's environment.
In Puppet 3 I am getting an error on all definitions for custom types. It says "Error 400 on SERVER: Invalid parameter provider...". Provider should be a given parameter for custom types because otherwise there is no way to specify which provider should be used with it. This is potentially a very major bug. Please let me know how I can help so you're able to reproduce and fix the issue.
Final resolution: When validating resources during catalog compilation, Puppet will load types and providers from the environment that the catalog is being compiled for. (Modulo that other bug that causes cross-environment contamination.)