I just developed an Android App which I´d like to distribute for free.
In order to be able to earn some money for my work, I´d like to add some adverts or notification to the app. If a user decides to donate some money, he will receive an unlock code for the "donate" version using some kind of unlock code.
Is there any "best practice" for implementing this in Android?
Yes, there is. It's in-app billing.
After reading the link above, you'll understand that you can implement various packages that will provide, each, the desired functionality. In your case, you will have "donation products" (packages) that the user will buy. Some of the details that need to be addressed here, IMHO:
Most simple apps are $1, $2, $5, $10 and $20, but you can provide higher values as well, of course. Comparing to the multiple-app pattern, this has the advantage of simplified code logic, since you manage everything inside one code branch, and there is no need to fiddle with different applications.
Since you're providing donation packages, it's logical that the user can donate that given quantity more than once. Thus, you should just make sure that the donation package --- the product you add in the Market console --- is unmanaged.
That's the general concept together with the two main concerns about your particular case.
In-app billing is very simple to implement.