At my last job, the infrastructure guys were wild for virtualisation. All the actual physical servers were just hosts for VMs, which did actual work. VMs were created for some need, and destroyed if that need was no longer felt. Therefore, no machine ever changed purpose: physical machines were only VM hosts, and virtual machines were destroyed rather than reused.
As a result, we were able to name machines after their functions without running into the traditional problems that stem from that. Sadly, this left us with a terrifically dull naming system: physical machines were kvm-001, kvm-002, etc, and VMs were fooapp-001, fooproxy-001, foodb-001, etc.