According to Pavel Veller on the Sitecore forums, answering a question similar to yours:
First, there are different fallback strategies. Field-level is most
likely done via the StandardValuesProvider and yes, you need to have a
version in the language for the fallback to kick in. We built a
Language Tool wizard in SCORE that can create empty language versions
to help in exactly this scenario. You can also do item-level fallback
with ItemProvider which will make it appear as if an item had a
version in the language even if it doesn’t. The good thing about both
is that you fallback on the Sitecore API level. Services like search
crawlers and publishing all work via those APIs (until you wrote your
own, of course) and as a result they all “see” the fallback.
Publishing will actually “materialize” the fallback value and the
crawler on CD will work with the items and field values as if those
were real.