The most common way in which oracles occur in complexity theory is as follows: A fixed oracle is made available to, say, a Turing machine with certain limited resources, and one studies how the oracle increases the computational power of the machine.
There is, however, another way in which oracles sometimes occur: as part of the input. For example, suppose I want to study algorithms for computing the volume of a given high-dimensional polytope. Classically, the polytope would need to be specified by providing a list of its facets or some other explicit representation. However, we can also pose the problem of computing the volume of a polytope that is specified by a volume oracle, that takes the coordinates of a point in space as input and outputs "yes" if and only if the given point lies inside the polytope. Then we can ask what computational resources are needed to compute the volume of a polytope that is specified in this manner. In this particular case we have the very nice polynomial time approximation scheme of Dyer, Frieze, and Kannan and, interestingly from the complexity theory point of view, a proof that randomness helps in an essential way for this problem, in that no deterministic algorithm can perform as well as the Dyer-Frieze-Kannan algorithm.
Is there a systematic way to study the complexity theory of problems in which oracles are provided as part of the input? Does it somehow reduce to the usual theory of complexity classes with oracles? My guess is no, and that because there are too many different ways that an oracle could be supplied as part of the input, every problem of this sort has to be handled in an ad hoc manner. However, I would be happy to be proved wrong on this point.