There are a lot of different ways of how to do this. One possiblility (i use a deviated version of this) is the follwing: (You don't necessarily need a flag, but I think that flags help you a lot.)
Initial effort (probably only needed once):
1. Place a flag on the source
2. Room.lookAtArea( Flag.pos.y-1, Flag.pos.x-1, Flag.pos.y+1,Flag.pos.x+1)
3. check terrain and structures of the returned positions and save all walkable tiles to the flag memory
Subsequent requests:
simply get flag memory and check, if the walkable tiles are occupied by creeps
don't forget to update the flag memory should you build a structure near the flag