|One pin on the embedded target can be spared for generic debugging
|purposes but simple "blinky LED" or whatnot doesn't cut it very well.
|I'd like to have at least one digit (hex, even) for display of the
|embedded system's state to display on a 7-segment.  (I don't have a
|logic analyzer, I don't want to hook the PIC up to my PC parallel port,
|and I don't have an oscilloscope.)

The normal approach I use (though I do have an oscilloscope >:*3) is
to do something like this:

SendByte:
                bsf     C
                rlf     Data,f
SendBit:
                bsf     OUTPUT
                btfss   C
                 bcf    OUTPUT
                bcf     C
                rlf     Data,f
                movf    Data,f  ; Test if zero
                bcf     OUTPUT
                btfss   Z
                 goto   SendBit
                return

Note that RRF's may be substituted if lsb-first ordering is desired.  On a
scope, the data will appear as a series of blips, with wider blips representing
"1"s and narrower ones representing "0"s.  Since the total time of either type
of bit is constant, the display on the scope is stable.

For your application, you may want to strech out the pulses somewhat (a low bit
is represented by only a 2us pulse, and there's only 3us between the end of a
high bit and the start of the next bit) but this coding scheme is quick and easy
to implement, easy to look at with a scope, and easy to decode (wait for a risin
g
edge and then look at the data a few microseconds later).