Hi Werner,
Your #3 option is close, the PatternTest has to be applied to Blank.
PatternTest
Blank
Clear[f]; f[x_Integer, b : (_?BooleanQ) : True] := If[b, x, -x]; {f[1], f[1, False]} (* {1, -1} *)
This may be a way:
Clear[f]; f[x_Integer] := f[x, True]; f[x_Integer, b_ /; MemberQ[{True, False}, b]] := If[b, x, -x];
Thanks. But this is the same as my #4
Great, Rohit. That's it. Thanks a lot.