If the restriction for x is expressed by specifying the Head, there is no problem: e.g. f[x_Complex : 1+ I] := .... . If the restriction is expressed by a predicate I did not find a way to set a default value for the argument. Who can help?
In this case, you will want the expanded form of Pattern[] to account for both PatternTest[] and Optional[]. Thus:
Pattern[]
PatternTest[]
Optional[]
f[x : (_?NumericQ) : Pi] := Sin[x] {f[], f[Pi/2], f[y]} {0, 1, f[y]}
One thing to pay attention to when doing this is to make sure that the default value matches the pattern.
What happens if it doesn't match has even changed between versions (rather arbitrarily, and without documentation or warning):
https://mathematica.stackexchange.com/questions/108636/version-inconsistency-with-optional-arguments-what-if-the-default-value-doesnt