This is indeed an interesting topic, I didn't actually research it before picking an approach. I simply went with cloning and then putting symbolic links in place to pull the various clones in.
I find it interesting that you would pull all of these onto the host and allow vagrant to do all the provisioning. My approach as always been that vagrant should bring up the base VM, provision just want is required to do provisioning (I know that sounds strange), and then let the remainder of the provisioning take place within the VM itself. So vagrant provisions puppet and git only, and then lets the remainder of provisioning take place in the VM. This way I can let the VM manage itself later without involving vagrant, which is important for things like continuous delivery and basic IT ops. I don't use puppet master, I simply use GIT and let the nodes keep themselves up to date using cron. It just scales better, and I like the simplicity.
Not strictly related to your post, but it made me think of that. I will certainly look into librarian. Thanks.