Since I didn't have your dataset I used the diamonds one that comes with ggplot2.
Here's what I came up with...
require(ggplot2)
median.s<-ddply(diamonds, .(cut), function(df) {
return(median(df$depth))
})
p<-ggplot(data=diamonds, aes(label=median.s$V1))
p1<-p+geom_boxplot(aes(x=cut, y=depth))
p2<-p1 + geom_text(data = median.s, aes(x=cut, y= V1, label = V1, hjust = -2, vjust = 0.5))
p2
I mangled it together so maybe someone can come up with something more elegant, but it seems to work. You can adjust the position with the justifications. I can't get them exactly in the right positions for my preferences. Again, someone else might know better.
Brandon