Disclaimer: This is just how I do it :)
I don't see any benefit to putting Artifactory on the same server as Puppet Master, and that seems like a bad idea.
In Artifactory I have a virutal repository that includes only our product artifacts that I care about. I have a separate generic web server that hosts various things puppet nodes and sometimes people in our company need to download. That server is also a forward proxy to the virtual repo in artifactory.
The local web server syncs to an external aws server nightly. Internally, nodes that need to download bits get them from our local server. Externally, they download from the cloud server (really an auto-scaling cluster).
This makes it fairly straightforward to write puppet manifests/custom types that can download, md5, and install artifacts on nodes. Even slicker for Linux would be to build packages, but I don't currently.
I also use Foreman as a Puppet ENC. Versions of software are configured as Foreman parameters on a global, group, and, if need-be, node level. To deploy a new version of of an application war, someone just logs into Foreman, sets the parameter, and waits for Puppet to do its job (or logs into the node and forces a Puppet run if they need to).
Hope that gives you some ideas.