Getting a Custom Field Value on a Contact with Javascript API
The syntax is incorrect - and I just confirmed that the syntax generated by the API Explorer for Getvalue is incorrect, so you're not to blame!  

The culprit is this line:

"return": ["custom_102"],


In JSON, the square brackets indicate an array.  "return" expects an array for a Get action, but Getvalue accepts only a single value (for the obvious reason).  If you remove the brackets:

CRM.api3('Contact', 'getvalue', {
  "sequential": 1,
  "return": "custom_102", //custom_fieldId
   "id": 2 // contact id
 }).done(function(result) {
   // do something
 });


You should be in business!