jQuery plugin boilerplate jquib
Very interesting and fun question. Boilerplate code is a reason to close questions down, but this code is a perfectly valid question.

Naming


JavaScript uses lowerCamelCase variable and function names, avoid names like public_interface and option_one.
You have anonymous functions, this makes stack-traces needlessly complicated, go for __construct: function pluginConstructor (options) {
Prefixing with _ should be avoided. If you do it, ensure _ items are 'private' unlike __construct


Idioms and Custom


Yoda conditionals like if ( undefined == $.data(this, "plugin_" + PLUGIN_NAME) ) are hard to read
Worse, your conditionals are not consistently Yoda: if ( typeof plugin.public_fn[prop] === 'function' )


Comments


I like your approach to commenting


JSHint.com


Your have problems in your code:


Unnecessary semicolon
Declaring functions in an extra set of {} is bad practice
Use plugin.container, not plugin['container']
prop leaks in to the global namespace here: for ( prop in plugin.public_fn ) {



Finally, having undefined as a parameter is silly. If you were to pass anything but undefined, then your yoda condition would fail.