Null-Checking Semantics Obscurity

This topic is going to be simple, yet an interesting one. I’ll try to expose here my feelings about a certain case of null-checking.
It’s a well-known fact that introducing null-values considered by its inventor, Tony Hoare, as a billion-dollar mistake. Despite of some “modern” practices like making classes immutable, applying Null-Object pattern or using Code Contracts extensively, we still often want to declare an instance of an object as null (no instance). I’m not going to discuss the fundamental problem of null-values. Instead of that, I just want to consider a specific case concerning null-checking.
Several months ago I was reading some code in a ViewModel and stumbled upon a method implemented as it follows:

bool CheckCard(CardDescription description, out CardReadingResult readingResult) {
    readingResult = null;
    if (description != null) {
        CardReadingResult r = device.SearchForCard(description.CardType);                
        if (r == null)
            Notify("Card was not inserted.");               
        else {
            var info = CardInfoParser.GetInfo(r.CardInfo);
            if (info.Number == description.Number) {
                readingResult = r;                        
            }                        
        }
    }
    return readingResult != null;
}

Continue reading