This is expected behaviour. This was brought up and discussed on infinispan-dev, see this thread for details. Basically, in summary, it is too expensive to clean up these files - as this involves locks - only to find that they may be recreated again by a concurrent thread. So the task of removing 0-byte files is left to the expiration reaper thread when purgeExpired() is called on the CacheStore.
So if you have a reaper thread enabled, you should see these being removed from time to time.