@pheonix I'm confused by this response, and I think this is an interesting exercise, so I hope you don't mind this reply.
Either the ad server has enough information to validate the bids, in which case why ask the client to collect them at all? Or it doesn't, and the client could lie, like @rndeon suggested. What am I missing?
In particular, if the client queries several advertisers and forwards all the responses to the ad server, I'd expect a graceful fallback for some of the requests failing. If the ad load fails when any request fails, then every additional bidder multiplies the failure rate. So the client should be able to look at the responses and decide to drop some of them. While signing might help validate bids, encryption might keep the client from making decisions on bid contents, and a signed timestamp might help prevent replaying old bids, even cryptography can't keep the client from pretending it never received a response. And the client could drop responses at random or based on metadata, instead of on actual bid contents, and still screw with the results.
That said, and like you point out, this is much more complicated than just blocking the entire ad loading process, which is safer and more efficient for the client, so I'm not sure it's worth trying to manipulate the auction outcomes. Sending decompression bombs or other invalid data to ad servers to waste their CPU cycles is still tempting though…