Here's one way of doing it:
In this example I create a grid of dirt objects that cover the pan - these are invisible, but will be used to track how clean the pan is.
There are two instances of the object, one with a dirty animation overlaying a another with a clean animation. As you move the mouse over the pan I repeat-spawn a mask object to hide the dirty version wherever it's spawned (using destination out effect), gradually revealing the clean one. Any dirt objects overlapping the mask object are destroyed - a tally is kept and when all have been destroyed the pan is 100% clean.
Bubbles are created - I have these draining off but if you want them to remain you can disable their bullet behaviour.
There's a more detailed explanation in the project comments.