Hi Alex,
I did some testing according to your claims and found that indeed "?" seems to behave like "+".
To be more specific this only seems to occur when "?" is used at the end of a route pattern, when used in the middle of a route pattern it behaves as expected. This is probably the reason this hasn't been picked up earlier as generally the "?" wildcard is not used at the end of a route pattern as it introduces an interdigit timeout.
This seems to be the case in Cisco CallManager right up to 4.0(1).
I have submitted a bug (CSCef00199) relating to this issue, you can refer to this for information and resolution. Note that in the mean time there is a simple workaround for this issue.
Regards,
-michagre