A [Foo] Bar = A Foo Bar, A Bar A [Foo|Moo] Bar = A Foo Bar, A Moo Bar A [Foo|Moo|] Bar = A Foo Bar, A Moo Bar, A Bar A [[Foo|Moo]] Bar = same as previous, but discouraged.
That's the wrong way round. [Foo|Moo|] is, without any need to define new syntax: "Foo" or "Moo" or "" (the empty string, ie. nothing). Personally, I would put the extra pipe at the beginning, but either would work without any extra programming.
So:
A [Foo] Bar = A Foo Bar A [|Foo] Bar = A Bar, A Foo Bar (the initial | could be consider implicit if only one option is given - there is no reason to put the word in brackets unless you intend it to be optional. Depends if the addition convenience is worth the additional confusion.) A [Foo|Moo] Bar = A Foo Bar, A Moo Bar A [|Foo|Moo] Bar = A Bar, A Foo Bar, A Moo Bar