What I want to do is create a forest based on the primary key of a database and only load the rest of the data beneath a given node after it is selected/expanded. What would be the best approach for something like that?
From what I have read it sounds like I would just use AJAX to load the data into a json and then use that to create the tree. The trick is updating that json store when a tree node is selected. Do I just need to write some code to do a custom merge of the json data using onclick or is there a better way to do this?
Thanks.

Your approach is correct.
Your approach is correct. The dijit.Tree class function that I used to catch the click is _onExpandoClick. Inside of that function I have my code to do the AJAX request. The node that has no children that you want to add the expand node uses node.makeExpandable() to show it set isExpandable to true. If you don't do that then it will not go into _onExpandoClick as you can see in _onClick.