If each miner has a different share difficulty in a PPS pool, how should I calculate and reward the relative effort of each? For discussion purposes, suppose I have an ASIC miner, several GPUs and a CPU botnet all mining with different difficulties.

When a share is returned to the pool, at what difficulty threshold should I consider multiplying the per-share value for that user?

For example if the ASIC miner returns a share that is substantially closer to the target than what a difficulty of 1 would return, should I treat that as any more valuable?

Am I incentivising correct behavior in a client?
You should count each share as valuable as the difficulty of the pre-determined target for that miner. If you count the actual value of the hash it found itself, either the math won't work, or you'll introduce massive variance instead of reducing it (which a pool is intended to do).

When you choose a particular share difficulty D, you are restricting the set of valid hashes to a set that is D times smaller than the set of valid hashes for difficulty 1. Given that each of such results is D times less likely to be found, it is fair to count it as D shares of difficulty. However, each hash is either good or not good, and each has a fixed probability of being good.

If you're going to use the actual hash value obtained to calculate share value, most hashes won't be valid, but those that do will introduce extra variance: some (unlikely) ones will result in a very high score, and some won't. There is no need for this: just giving each hash the same score is just as well a way of measuring their hash rate, which is what this is all about.

Of course, you can't let a miner choose its share difficulty after finding one: that would allow them to cheat.