Hitting an Enemy and Pushing them back

I want to knock back an enemy when they are hit by the player. The enemy has a custom script that handles gravity (It has a character controller).

Here is the script:

//addGravity
private var walkSpeed : float = 1.0;
var gravity =20.0;

// The current move direction in x-z
var moveDirection : Vector3 = Vector3.zero;
// The current vertical speed
var verticalSpeed = 0.0;
// The current x-z move speed
var moveSpeed = 0.0;

private var charController : CharacterController;

function Start()
{
    charController = GetComponent(CharacterController);
    animation.wrapMode = WrapMode.Loop;
}

function ApplyGravity()
{ 
    verticalSpeed -= gravity * Time.deltaTime; 
}

function Update () 
{
  ApplyGravity();
  var movement =  moveDirection  * moveSpeed + Vector3 (0, verticalSpeed, 0) ;//+ inAirVelocity;
  charController.Move(movement * (Time.deltaTime));

  if (charController.isGrounded)
    {verticalSpeed = 0;}
}

Now, I have a script that handles the damage calculation when they are hit. I want to handle the knockback here. Here is the function from that script:

function ApplyDamage (damage : int)
{
    var myself : addGravity = GetComponent(addGravity);
    charController = GetComponent(CharacterController);

    flinch= true;
    eA.SendMessage ("Flinch"); //Sending this to the Flinch function in the AIFollow.cs Script
    animation.Play("gotbit");

    // We've been hit, so play the 'struck' sound. This should be a metallic 'clang'.
    if (audio && struckSound)
        audio.PlayOneShot(struckSound);

    if (hitPoints <= 0)
        return;

    //Knockback Physics 
    //======================================================================//
    var pos = transform.TransformPoint(punchPosition);

        var slamDirection = transform.InverseTransformDirection(target.position - transform.position);
        charController.Move(slamDirection * strength);

    myself.verticalSpeed = 5;
    hitPoints -= damage;
    //======================================================================//

    if (!dead && hitPoints <= 0)
    {
        Die();
        dead = true;
    }

    //This will set the flinch to false
    yield WaitForSeconds (flinchTime);
    flinch = false;
    eA.SendMessage ("unFlinch"); //Sending this to the unflinch function in the AIFollow.cs Script
}

This line is suppose to move the enemy in the opposite direction (even though right now, its more like warping and I'm not sure how to fix that, maybe time.delta?) but it only works for one direction.

charController.Move(slamDirection * strength);

Can anyone help me with this?

I am sure of one thing:

slamDirection = PlayersGameObject.transform.forward;

I hope this has helped you =)

EDIT:

You can try this for the animation:

enemy.transform.LookAt(Player.transform.position);//call this once the enemy is hit

I would place this function on the enemy, and call SlamBack when he has to get slammed.

function SlamBack(slamDistance : Vector3)
{
    var slamTime = Time.time;
    while (slamTime+smoothTime > Time.time)
    {
        charController.Move(-slamDistance*(slamTime+smoothTime-Time.time)/smoothTime*Time.deltaTime);
        yield;
    }
}

To get him slammed longer, you make slamDistance greater, and to make him come to a rest slower, you edit smoothTime.

Is this the kind of interpolation you are looking for?