For more up-to-date notes see http://www.cs.yale.edu/homes/aspnes/classes/465/notes.pdf.
For randomized distributed protocols, the adversary specifies how nondeterminism (e.g. scheduling decisions, failures, which messages get lost, etc.) interacts with randomness. The adversary is essentially a function that chooses the outcome of all nondeterministic events at time t based on the history of the system before time t. Various degrees of adversary power are used in different situations:
An oblivious adversary makes the same decision at time t regardless of the previous history of the protocol.
A content-oblivious adversary can see who does what (e.g. if p sends q a message in round t' < t or not) but not the contents of messages and/or memory locations. Such an adversary effectively can't see past coin-flips unless they affect process behavior.
An adaptive adversary sees everything but the future.
Naturally, for maximally intimidating upper bound results, you want to work with an adaptive adversary. But it's often impossible (or just slow) to solve many problems with an adaptive adversary, so a strategic retreat to a weaker adversary allows you to say something positive.
Conversely, for lower bound results, the weaker the adversary the better the result.
It's important when reading (or writing) about randomized distributed protocols to be careful about the power of the adversary. Assuming too weak an adversary may be both mathematically unsatisfying and practically unrealistic.