I wrote this Code Project article about using MEF for extensibility in .NET. It's a good introduction.
There are other extensibility frameworks for .NET, such as SharpDevelop's Add-in Architecture, Mono.Addins and System.AddIn.
For Java, there is the Eclipse Plug-in Architecture.
The general pattern is this:
- You define a contract (normally an interface) between the host and the extension
- You need a discovery mechanism that goes out and looks for installed extensions
- You need to be able to dynamically load the extensions and make the host aware of them
In practice it shares a lot with Dependency Injection and the Strategy Pattern.