def METHOD_NAME(asdf_obj, data_key='data', wcs_key='wcs', header_key='meta'):
    """
    Load from an ASDF object.  This method is primarily used internally
    to extract the correct parts of an ASDF file to reconstruct an image
    with WCS and metadata.
    Parameters
    ----------
    asdf_obj : obj
        ASDF or ASDF-in-FITS object.
    data_key, wcs_key, header_key : str
        Key values to specify where to find data, WCS, and header
        in ASDF.
    Returns
    -------
    data : ndarray or `None`
        Image data, if found.
    wcs : obj or `None`
        GWCS object or models, if found.
    ahdr : dict
        Header containing metadata.
    """
    asdf_keys = asdf_obj.keys()
    if wcs_key in asdf_keys:
        wcs = asdf_obj[wcs_key]
    elif wcs_key in asdf_obj[header_key]:
        wcs = asdf_obj[header_key][wcs_key]
    else:
        wcs = None
    if header_key in asdf_keys:
        ahdr = asdf_obj[header_key]
    else:
        ahdr = {}
    # TODO: What about non-image ASDF data, such as table?
    if data_key in asdf_keys:
        data = np.asarray(asdf_obj[data_key])
    # TODO: This hack is so earlier test files would still
    # load, but we need to make customization easier so
    # we can remove this hack.
    elif 'sci' in asdf_keys:
        data = np.asarray(asdf_obj['sci'])
    else:
        data = None
    return data, wcs, ahdr