The follow-directions function's arguments are both interesting from the point of view of the template. So, rather than just having two conditions from a binary tree or three conditions from the path, we have 6 conditions, one for each combination of family trees and paths:
(define (bt-path-template a-bt a-path)
(cond
[(and (boolean? a-bt)
(null? a-path))
...]
[(and (bt? a-bt)
(null? path))
...]
[(and (boolean? a-bt)
(eq? 'l (car path)))
...]
[(and (bt? a-bt)
(eq? 'l (car path)))
...]
[(and (boolean? a-bt)
(eq? 'r (car path)))
...]
[(and (bt? a-bt)
(eq? 'r (car path)))
...]))