This is a very common question, being asked in various shapes and forms. Most people don't realize when they are making asynchronous calls. The solution, however, is always the same: wrap your method code on the server into a fiber or use a future.
The best practice, I think, is to use the currently available Meteor._wrapAsync
function as described, e.g., here:
Meteor: Calling an asynchronous function inside a Meteor.method and returning the result
Some other options are described here: https://gist.github.com/possibilities/3443021
Update: The method is now called Meteor.wrapAsync
.