Any entity (A) will pass through another passable entity (B) if:
a) B is passable indeed. The easiest method is to check its "passable" flag in Wed.
b) A uses c_move for its movement and includes "ignore_passable" in its c_move instruction.

Let me know if you need more help.