If for some reason this is not possible in that moment [i.e. there was not enough space left on the Temp folder], it never happens, and the file is allocated in the "normal" way, as it is downloaded.
the problem is that the normal allocation create sparse files.
That's not true, at least not in this way.
If preallocation is disabled, aMule tries to create sparse files.
If preallocation is enabled, aMule tries to allocate full space.
That's the rule. What you experience and try to deduce (wrongly) is the so-called 'else-branch'. I'll describe it for you.
If preallocation is disabled and aMule fails to create a sparse file, it will create a zero-sized normal file.
If preallocation is enabled and aMule fails to allocate full space, it will create a file
whatever file your file system creates by default. This file may have any size between zero and the full size, depending on if the preallocation succeeded partially.
Thus, if you want to make sure that in case the preallocation fails aMule creates a normal (non-sparse) file, you must set your file system to create non-sparse files by default.