Excellent article!
One quibble: it is actually possible to use fields like departure_time and stop_name as subscripts. Those fields will be imported as string subscripts, which can contain any character (including nonprinting characters). For example, the following code works fine, and automatically imports departure_time as a string subscript:

  # stoptimes -> [stop_id] -> [trip_id] -> [stop_sequence] -> [departure_time]=None
    for row in reader:
        iris.set(None, "stoptimes", row[3], row[0], row[4], row[2])

The %JSON Adaptor and Formatter classes are now documented in a new chapter of Using JSON (see Using the JSON Adaptor). The chapter owes a lot to an earlier version of this article (from which I stole adapted most of the examples). Thanks, Stefan!