AJAX calls in CTools Content Type Plugin?
Short answer: you should use #ajax['path'].

Long answer:

Having a ajax callback does not help as ctools creates it's forms differently afaik. The callback done by system/ajax cannot find the complete form definition thus cannot find an element to process the ajax request for. Using #ajax[path] just triggers a menu item.

You can check for yourself by dumping the form when using #ajax[callback]

function ajax_form_callback() {
  list($form, $form_state) = ajax_get_form();
  drupal_process_form($form['#form_id'], $form, $form_state);


I've modified the simplecontext_content_type_edit_form by adding the user autocomplete widget and your field which both work :)

function simplecontext_content_type_edit_form($form, &amp;$form_state) {
  $conf = $form_state['conf'];

  $form['owner_name'] = array(
    '#type' =&gt; 'textfield',
    '#title' =&gt; t('Username'),
    '#default_value' =&gt; 'admin',
    '#autocomplete_path' =&gt; 'user/autocomplete',
    '#size' =&gt; '6',
    '#maxlength' =&gt; '60',
    '#description' =&gt; '$description',
  );

  $form['link_type'] = array(
    '#type' =&gt; 'radios',
    '#title' =&gt; t('Link Type'),
    '#ajax' =&gt; array(
      'path' =&gt; 'my_module_set_target'
    ),
    '#default_value' =&gt; empty($conf['link_type']) ? '_blank' : $conf['link_type'],
    '#options' =&gt; array('none' =&gt; t('No Link'), 'internal' =&gt; t('Internal Link'), 'external' =&gt; t('External Link'), 'document' =&gt; t('Document Link')),
  );
...


As you now use #ajax path you need to add a menu item as I did like

&lt;?php

function my_module_menu() {
  $items = array(
    'my_module_set_target' =&gt; array(
      'title' =&gt; 'AJAX Example',
      'page callback' =&gt; 'my_module_set_target',
      'access callback' =&gt; TRUE,
      'expanded' =&gt; TRUE,
    )
  );
  return $items;
}

function my_module_set_target() {
  drupal_json_output( array('data' =&gt; "ABC"));
}


A nittpick about #attached[js]: the inline js should be key => value like:

'#attached' =&gt; array(
  'js' =&gt; array(
    'alert("Yay.");' =&gt; 'inline',
  ),
),


I've used Firebug to check for the resulting value not the resulted effect. So I hope this helps to fix your problem.