GolfScript - 243 232 228228 227 characters
I translated my CoffeeScript answer into GolfScript, which is much more suited to the string manipulations.
EDIT: Saved six characters by properly using the increment operator, three by making good use of the stack, and six more by irresponsibly redefining operators I'm not using, and one more by not printing the trailing space after grace lines.
Entirely golfed:
..0="HL"?2+3%:o)2%.@="CDEFGAB"?7o*+:`2%45 32if:r;
).2$,<{=}{;;r}if:&;
[" "5*:|" --- ":g]4*[|"-"5*]5*+[|g|]+.
[`<~]\[`>([0=:^&79r^]''+\~]
+17`<`)18if<9`>`9if:j>:t 13`>.2*):x;
4,1>{`j-\2${+}{-}if}%\;
{.@<\t>(:v[x<'|'+x)v>+]\++:t}
/-1%n*
With comments:
# extract octave
..0="HL"?2+3%:o
# extract note
2%1\-.@="CDEFGAB"?7o*+:k
# line spacer
2%45 32if:r;
# extract accidental
1+.2$,<{=}{;;r}if:a;
# staff
[" "5*:|" --- ":g]4*[|"-"5*]5*+[|g|]+.
# lines below
[k<~]\
# note line and above
[k>([0=:w a 79r w]''+\~]+
# cut off just what we need
17k<1k+18if<
9k>k 9if:j>:t;
# and the note stem
13k>.2*1+:x;4,1>{k j-\2${+}{-}if}%\;
{
.t<\
t>(:v[x<'|'+1x+v>+]\++:t;
}/
# now output the note
t-1%n*