Choose the block and set its passable flag. In combination with ignore_passable, this already works. If u want it passable for only some special entitys, u can build the block as map entity setting this action fex
//skill1 PassableGroup 1
action Passable_Block()
{
my.group = my.skill1;
}
using this c_move with c_ignore will let the entity through the block (and all passable-things)
..
c_ignore(1,0); //ignore our block(s)
c_move(me, vector(5*time_step,0,0), nullvector, IGNORE_PASSABLE); //set ignore_passable for other passable ents to pass
..
Note: Remove ignore_passable if the entity only should go through our "special" blocks not through all passable entitys
Edit: Not sure right now (cause iam not at home) if c_ignore needs IGNORE_PUSH flag set. Just try it.