Essentially "(a?.b)" would be exactly equivalent to "((a == null) ? null : a.b)".
Just like "." itself, you should be able to chain a whole pile of them together, eg "obj1?.prop1?.prop2?.prop3" (where any of the intermediate properties or the original object could be null, in which case the whole expression returns null), or "obj1?.prop1.prop2?.prop3" (where you either know that prop1 can't be null, or you want to throw a NullReferenceException if it is).
It's fairly clear-cut for properties. It's a little less so for methods; ideally though it'd work for them as well, in a short-circuit fashion. ie. if the LHS is null then the method doesn't get called, and the call expression is considered to return null (if the method returns a reference or nullable type), or do nothing (if the method is void). If the method returns a value type, I'm not sure what correct behaviour would be there. Maybe that should be a compiler error, or maybe it should return the default value (eg. 0 for integers).