For the record should anyone happen to stumble across this thread with a similar question, I found a crazy workaround to establish a bidirectional connection between a coordinator and a router. (I still haven't figured router to router out.)
Router after a users presses key 1 (commands the mote to join the network)
A) Mote searches for and joins a network created by the Network Coordinator
B) When a ZDPCallback gZDOToAppMgmtZRRunning_c is received, the router immately executes a ASL_MatchDescriptor_req(NULL, gaBroadcastRxOnIdle, AF_FindEndPointDesc(appEndPoint));
C) When a ZDPCallback gMatch_Desc_rsp_c is received, the router sets a timer and sends a "Hello_Ack" to the Coordinator via ZigBee
D) The mote waits until a "Hello_Ack" is received from the coordinator.
E) When a "Hello_Ack" is received the timer is stopped and BeeAppTask is created (gAppTaskID = TS_CreateTask(gTsAppTaskPriority_c, BeeAppTask)
D*) If a Hello_Ack is not received from the coordinator before the mote timer expries, the mote returns to BeeAppInit.
Network Coordinator after Network Created:
1) BeeAppDataIndication listens for a "Hello_ACK" from a mote
2) When it receives the "Hello_Ack" it immediately executes a ASL_MatchDescriptor_req(NULL, gaBroadcastRxOnIdle, AF_FindEndPointDesc(appEndPoint));
3) When a ZDPCallback gMatch_Desc_rsp_c is received, the coordinator binds to the device.
4) The Coordinator then sends a "Hello_ACK" to the mote via ZigBee