It really depends.
If you have a SAN(or other kind of shared storage such as NFS/ iscsi) with multiple ESX hosts connected to the same datastores, there is no need to have a proxy on EACH host.
For example, if you have a cluster with 10 ESX hosts connected to the same SAN(shared storage), then I would recommend 2(best to not place them on the same ESX hosts of course ) proxies unless more are needed for a good reason(for example for performance which also means that source and target locations can handle more simultaneous jobs, which often is not the case unless your backup location is very fast ). hotadd will work for all VM's placed on storage(luns) accessible to the proxy, and it does not have to be on the same ESX host as the original VM for that(as long as it's storage is accessible it's OK).
If you have 10 ESX hosts with local storage, then it's best to have a proxy on every ESX host so that it can still utilize hotadd.
(in case of larry environment a proxy for each host is also needed )
What is best practice I do not know for sure, I'm not an Veeam employee, but it does not seem very convenient to me to have a lot of useless veeam proxy VM's floating around in your environment. We have multiple ESX clusters running, and always used 2 proxy's(8 vCPU) per cluster and for ESX hosts with local storage 1 on every ESX host(2 vCPU's). This worked fine for years.