So from what I understand the way the oracle is structured is that you give it an input of |x>|y> , where x is the actual input state to the function that the oracle is implementing , and y is a sort of blank bit , that is used to govern the output. This is probably done because oracles use CNOT gates, which very naturally implement the XOR function. This helps with not just reversibility , but also controlling the phase of the state , without changing the state itself , if instead of the "blank" state y , you give it the state |->. This is because XOR with |-> implements (-1)^f(x) * |-> as its output.