I must warn that this method is for hard workers, no for lazy people. This method requires also a reasonable traffic to your website and some programming skills.
This method is not only legal under big G eyes but also is encouraged by them.
Build families of adxense blocks. For example:
Ad11 = 120x600 and Ad12 = 160x600 are a family
Ad21 = 300x250 and Ad22 = 336x280 is another family
Then write a code that shows randomly ads in the same space-
For example, write a program that shows 50% Ad11 and Ad12 alternatively,
the same for Ad21 and Ad22
Wake up early the next day. Check which ad is performing better than other. For instance:
IF Ad11 is performing better than Ad12 then show Ad11 for that day
The opposite is true also. Do the same thing with Ad21 and Ad22. In general do that for all the families that you have built
Finally, before midnight restore the random ads showing and wait for the next day.
Doing that I discovered some advertising asymmetries than allowed me to earn an additional of 20% more without additional traffic.
I noted that this happens because many advertisers are inexperienced and do not take advantage of all the spots that Google makes available for them. Laziness is another factor, lazy advertiser do not want to write ads for all the ad formats.
It is true also that commons blocks like Ad12 and Ad21 perform better than Ad11 and Ad22, but is frequent the opposite case, and if you do not change the size of your ads you can lose money.
This is a free piece of advice, do not make a WSO from my post.
Please share your experiences here also.