See this issue for an explanation why some XML, elements, and attributes can be compressed away: https://github.com/appium/java-client/issues/74#issuecomment-50886465
The reason why you cannot use getAttribute() to grab the"content-desc" value from the element is because Android UIAutomator has the option of using either a full UI XML dump or a compressed dump, decided from the start of the UIAutomator process. Appium is using the compressed dump, so while you can find any element or attribute with an XPATH call, once you have an element you can only get a subset of attributes dynamically.
getAttribute can retrieve a subset of the values, including "text", "clickable", "checkable", and others...
The attributes that cannot be grabbed even though they are available in the full UI XML dump are "index", "content-desc", "class", and others.
It appears that there is no way around this unless we specify UIAutomator to ALWAYS do a full UI XML dump from the beginning of the process, which would slow down the automation. This user restarts the UIAutomator server multiple times to achieve this: https://github.com/appium/java-client/issues/74#issuecomment-64672526
If anybody else has an idea about how to dynamically grab getAttribute("content-desc") without relying on an XPATH call (how to query against the full XML), please post in a reply how to achieve this!