Ещё как вариант - это особый класс возврата, а-ля ASP.NET MVC ActionResut.
Т.е. все методы возвращают некоторый класс Result:
class Result<T> {
public T Result {get; private set; }}
public bool Success {get; private set; }}
public IEnumerable<Exception> Errors { get ... }
public string ErrorMessage {get ... } // этого можно и не делать
private Result() {}
public static Result<T> Success(T result) { return new Result() { Result = result, Success = true }; }
public static Result<T> Fail(Exception ex) { return new Result() { Success = false, Errors = new List<Exception>() { ex }, ErrorMessage = ex.Message }; }
}