The .contains function returns true for grandchildren as well as just children. Perhaps that is the issue here. (with blacklist, from what I can see the ad is being added to mc before mc is added to the stage)
Hey Letmethink you are great, you know?
After reading your post I made an ignorant attempt and tried replacing
stage.removeChild(ad);
with
stage.removeChild(mc);
and, surprisingly, it works!
Thanks a lot!