Is the NPC the owner of the DLG/script? That can sometimes cause problems, since a script will immediately terminate as soon as its owner is destroyed. You can still destroy the owner as the final function in an exit node script, but this will usually happen in plain sight of the player unless you jump them somewhere else first. You can also command them to walk somewhere, like the module exit, first before destroying themselves. In general though, it's pretty straightforward:
DestroyObject(oNPC, 0.0, TRUE, 0.0);
The variables here are the creature to destroy, the delay in seconds before destroying them, not fading them out (so FALSE if you do want them to fade), and the delay in seconds before they start fading (which only matters if the previous term was set to FALSE). If the creature is the script owner then you can swap the object reference to OBJECT_SELF. But in that case I would delay calling the function until everything else in the script has finished executing, like so:
DelayCommand(2.5, DestroyObject(oNPC, 0.0, TRUE, 0.0));
This will delay calling the function by 2.5 seconds, the value of which you can adjust as needed.
If you want a creature to destroy itself after walking somewhere first, you can add the command to its action stack. This is commonly seen when an NPC "exits" an area. Often this can be part of the creature's UserDefine script, the case for which can be called at the end of the conversation. For example:
ActionMoveToObject(GetObjectByTag("k_exit", 0), FALSE);
ActionDoCommand(DestroyObject(OBJECT_SELF));
SetCommandable(FALSE);
To issue those commands from a script owned by a different creature/object, you'd need to use AssignCommand to assign them to the NPC of interest.
If you want more specific details, you need to provide more info about the circumstances of your scene and how it is currently set up.