Currently, scap::target accepts the public_key_source parameter with which a declaration of that resource can set an arbitrary key for the deployment user. Conceptually, that means that the user id and key are defined per service which shouldn't be allowed. All of the services running on SCA and SCB will use the same deployment user, which means that if one of them redefines the key for that user, no deploys can happen.
Instead, scap::target should be responsible for managing user keys. The idea is that when defining such a resource, one only specifies the deployment user, and then the key for it is automatically deduced. An obvious way to achieve that is to put user keys in Hiera, and then scap::target can simply look up, say scap::keys::<user-name>, and fail if it doesn't find a key. This would also allow us separate BetaCluster and production keys; for the former, keys can reside in ops/puppet, while we can put the key for the latter in ops/private.