Good question.
nstcl implements a subset of the ns_ commands involved in processing adp templates, and ad_form makes use of some of the ones that are not implemented. Because of differences between how nstcl and aolserver implement these it's not a simple matter of implementing the missing ns_* procs. Specifically, recursion is handled differently in the native and pure tcl libraries, and ad_form relies on some globals (level, content) that don't necessarily have the same values at the same adp parse/emit stage.
The aD code's reliance on globals made it really hard for me to figure out what was going on, and ultimately I couldn't figure out how to bridge the two. Michael C suggested just reimplementing ad_form, as he did with the almost all the rest of the custom tags. His reimplemented code relies much more on namespaces than on globals, and is much cleaner to extend and debug.