the current problem is this:
we have a core plexus container used by the maven application, which defines things like WagonManager; and for each plugin, we have a child container which loads that plugin's specific dependencies (those not filtered by the exclusion filter in DefaultPluginManager). In the deploy plugin, the plugin contained (this has been worked around for now) declared a dependency on wagon-ssh...which means that the scp wagon should have been visible to WagonManager for this plugin's context. HOWEVER, since WagonManager is defined in the parent container, it cannot see components in the child (plugin) container, and therefore has no idea of the scp wagon's existence in the system.
This situation has other implications as well. For example, if we define a new wagon capable of artifact deployment - say webdav - we have to redeploy the maven-deploy-plugin with this new wagon as a dependency. It would probably be smarter in these cases to have a lookup mechanism which is similar to maven's plugin location process (brett's idea), and which would be reusable across maven-artifact, maven-scm, maven-core (plugins), etc.
As for component-factories, the new reliance on nested DefaultPlexusContainer instances rather than a single DefaultArtifactContainer should fix this. This is a special case, since the ComponentFactoryManager is a core plexus component, and is therefore defined in every container instance.
For now, wagon-ssh is included in maven-core's runtime dependencies, and we'll revisit this post-2.0