While I believe using the callback for jquery's fadeOut() method is correct in this case, you could still remove the element without it.
var block;
for (var i = 0; i < fieldsblock.length; i++) {
// Get the element
block = $("#" + fieldsblock[i] + "_tr" + nid);
// Fade it out without using the callback for whatever reason
block.fadeOut();
// Wait 400ms to remove it
setTimeout((function (blockToRemove) {
return function () { blockToRemove.remove(); };
})(block), 400);
}
Basically, (function (args...) { ... })(args...) lets you pass arguments to a function's local scope, which will "save the state" of the arguments you're working with. In the example above, we're passing block to the function's blockToRemove parameter, which then returns's another function that actually removes the element.
In this case it's definitely better to use the callback, but there are other times when someone could be looping through something where this would be very useful.