I had also tried using the same method as chafari and it works out great. I used individual cubes as nodes and only drop them if required.
Nodes:
1. I place a single cube (max total 15) on the position of the player and constantly check a terrain collision from that cube towards the player.
2. If the player goes behind some sort of the terrain, a new cube is placed on the player's new position and the new cube now does the collision towards the player.
3. Repeat process 1~2. If cube count goes over 15, start re-using the cubes from 1. Repeat.
NPC:
1. NPC does a terrain collision towards player, if player is in sight and no terrain collision then move towards player.
2. If player is NOT in sight and there are terrain collisions then check new collision towards the last cube that was dropped. If that is clear then move towards that cube.
3. If the last cube dropped by player is not in sight then check the cube before that last cube. Repeat until you find a cube that has no collision.
4. While moving towards a cube, also constantly check if player is in sight and collision.
5. While moving towards a cube, If player is now in sight then change target to player. Rinse and repeat.
Here's a working example.
http://www.youtube.com/watch?v=EicR3F6TXcM
As for doors you can collision check for the door object when they get near it and perform the action.