I agree with the author that having an option datatype makes the intention "this method returns some Foo or nothing" clear.
However, the suggested encoding of an option type in Java blends poorly with subtyping because a JOption<MySubtype> is not a subtype of JOption<MySupertype>. For a quick optional-return scenario, it may work, but as a substitute for nulls in optional parameters, you'd have to remember the precise type of every parameter and create non-empty JOption instances in a rather verbose way.
As an alternative, you could use a tool like Findbugs and its @Nullable annotation.