It depends on what default value you want to assign. If you want to default to a name in the parent scope, setting a default attribute value in the directive's compile
function will work:
compile: function(element, attrs) {
if (attrs.person == undefined) {
attrs.$set("person", "person");
}
...
If you want the directive to provide the default value, it gets a little tricker as Angular will not let you assign to the alias in the isolate scope (you will get a "Non-assignable model expression" exception from the watcher that's trying to propagate the assignment to the isolated parent scope). However you can prevent this by marking the attribute as optional (which means Angular won't register the listener when the property is ommited).
scope: {
person: "=?"
},
link: function(scope, element, attrs) {
if (scope.person == undefined) {
scope.person = "Bob";
}
...
}